const express = require('express')
const consola = require('consola')
const path = require('path')
const { Nuxt, Builder } = require('nuxt')
const app = express()

app.use(express.json())
app.use(express.urlencoded({ extended: true }))


// Import and Set Nuxt.js options
const config = require('../nuxt.config.js')
config.dev = process.env.NODE_ENV !== 'production'

// const apiRoute = require('./api')


async function start () {
  // Init Nuxt.js
  const nuxt = new Nuxt(config)

  const { host, port } = nuxt.options.server

  await nuxt.ready()
  // Build only in dev mode
  if (config.dev) {
    const builder = new Builder(nuxt)
    await builder.build()
  }

  app.get('/api/articles', (req, res) => {
    const data = require(path.join(__dirname, '../static/top-data.json'));
    res.json(data.articles)
  })
  app.get('/api/news', (req, res) => {
    const data = require(path.join(__dirname, '../static/news-data.json'));
    res.json(data.articles)
  })
  app.get('/api/jobs', (req, res) => {
    const data = require(path.join(__dirname, '../static/job-data.json'));
    res.json(data.articles)
  })

  // 修改 server/index.js，添加文章详情接口
app.get('/api/:type/:id', (req, res) => {
  consola.info(`请求文章详情: ${req.params.type} - ID: ${req.params.id}`);
  debugger;
  const { type, id } = req.params;
  const numId = parseInt(id);
   // 安全检查 - 仅允许访问预定义的数据类型
  const allowedTypes = ['top', 'news', 'jobs'];
  if (!allowedTypes.includes(type)) {
    return res.status(400).json({ message: '不支持的数据类型' });
  }
  const data = require(path.join(__dirname, `../static/${type}-data.json`));
  const article = data.articles.find(item => item.id === numId);
  
  if (!article) {
    return res.status(404).json({ message: `ID为${id}的${type}不存在` });
  }
  
  // 为文章添加详情内容
  const details = {
    ...article,
    content: `<p>这是关于"${article.title}"的详细内容。</p>
    <p>作者${article.author}对${article.summary}进行了深入分析。本文包含大量代码示例和实际应用场景的讨论。</p>
    <p>正文第一部分详细介绍了相关技术背景和基本概念。包括Nuxt.js的核心特性和最新的发展方向。</p>
    <p>第二部分分析了常见问题和解决方案，提供了多个代码示例：</p>
    <pre><code>// 示例代码
export default defineNuxtConfig({
  modules: [
    '@nuxtjs/tailwindcss',
    '@nuxt/content'
  ],
  experimental: {
    componentIslands: true
  }
})</code></pre>
    <p>第三部分展望了未来发展趋势和最佳实践建议。通过本文的学习，读者可以全面掌握相关技术要点。</p>
    <p>结语部分总结了核心观点，并提供了进一步学习的资源链接。</p>`,
    views: Math.floor(Math.random() * 10000),
    tags: ['Nuxt.js', 'Vue', 'JavaScript', '前端开发']
  };
  
  res.json(details);
});

  
  // Give nuxt middleware to express
  app.use(nuxt.render)

  // Listen the server
  app.listen(port, host)
  consola.ready({
    message: `Server listening on http://${host}:${port}`,
    badge: true
  })
}
start()
